Cargando...
Saltar al contenido principal

Uso de los Lifecycle Hooks

Los Lifecycle Hooks son una parte esencial de la programación, permitiéndote definir el comportamiento en puntos específicos durante el ciclo de vida de un objeto. Al usar los Lifecycle Hooks, puedes controlar cuándo se ejecuta cierta lógica en relación con la existencia del objeto en la escena.

El entorno de ejecución de scripts admite tres Lifecycle Hooks principales:

1. startup

  • Propósito: Se ejecuta solo una vez cuando el objeto es instanciado en la escena, generalmente cuando es creado o inicializado. Este es el lugar para configurar tu estado inicial, cargar recursos o realizar cualquier acción que deba ocurrir al inicio del ciclo de vida del objeto.

  • Cuándo usarlo: Puedes utilizar este hook para realizar cualquier paso de inicialización, como establecer la posición inicial, cargar activos externos o preparar el objeto para la interacción.

Ejemplo:

function startup() {
// Establecer la posición inicial del objeto
object.setPosition(0, 0, 0);
console.log("Objeto inicializado.");
}

2. update

  • Propósito: Se ejecuta en cada fotograma mientras el objeto esté activo en la escena. Este hook te permite realizar actualizaciones continuas, como mover objetos, verificar la entrada del usuario o modificar propiedades basadas en condiciones dinámicas (como el tiempo o la interacción del jugador).

  • Parametros:

    • delta: El tiempo en segundos desde el último fotograma (útil para actualizaciones independientes de la tasa de fotogramas).
    • time: El tiempo total transcurrido desde que la escena comenzó (útil para comportamientos basados en el tiempo).
  • Cuándo usarlo: Usa este hook para manejar la lógica que necesita actualizarse en tiempo real, como animación, actualizaciones de físicas y manejo de entradas.

Ejemplo:

function update(delta, time) {
// Hacer que el objeto se mueva hacia la derecha con el tiempo
let currentPosition = object.getPosition();
object.setPosition(currentPosition.x + 1 * delta, currentPosition.y, currentPosition.z);
}

3. dispose

  • Propósito: Se ejecuta cuando el objeto es destruido o eliminado de la escena. Este hook es esencial para limpiar recursos, detener procesos en curso o realizar cualquier lógica de finalización.

  • Cuándo usarlo: Puedes utilizar este hook para liberar memoria, detener animaciones o temporizadores, o guardar cualquier dato que deba persistir después de que el objeto sea eliminado de la escena.

Ejemplo:

function dispose() {
// Limpiar recursos antes de que el objeto sea destruido
console.log("El objeto se está eliminando. Limpiando recursos.");
object.stopAnimations();
object.removeEventListener('click', onClick);
}

Definiendo los Lifecycle Hooks

Puedes conectar tu script a eventos del ciclo de vida definiendo los Lifecycle Hooks con la directiva del preprocesador #pragma lifecycle. Esta directiva permite que tu script responda a momentos clave en el ciclo de vida de un objeto, como la inicialización, actualizaciones durante la escena y destrucción.

Aquí tienes un ejemplo que demuestra cómo utilizar los tres Lifecycle Hooks dentro de un script:

#pragma lifecycle(startup, update, dispose)

function startup() {
// Código de configuración inicial
console.log("Iniciando el objeto...");
}

function update(delta, time) {
// Lógica continua (por ejemplo, movimiento, animaciones)
console.log("Actualizando el objeto...");
}

function dispose() {
// Código de limpieza (por ejemplo, eliminar eventos, detener animaciones)
console.log("Limpiando recursos del objeto...");
}

Alias para los Lifecycle Hooks

Una de las grandes características del entorno de scripting es la capacidad de usar alias. Esto te permite asignar nombres personalizados a tus funciones de Lifecycle Hooks, haciendo que tu código sea más legible o mejor adaptado a tus convenciones de nomenclatura.

Por ejemplo, si deseas usar nombres personalizados como start o onActivate en lugar del predeterminado startup, puedes definir un alias con la siguiente sintaxis:

#pragma lifecycle(startup=start, update=updateLoop, dispose=cleanup)

function start() {
console.log("Objeto iniciado.");
}

function updateLoop(delta, time) {
console.log("Lógica continua ejecutándose.");
}

function cleanup() {
console.log("Limpieza de recursos al eliminar el objeto.");
}

En este caso:

  • start será la función ejecutada cuando el objeto sea inicializado (equivalente astartup).
  • updateLoop se ejecutará en cada fotograma en lugar de la función predeterminada update.
  • cleanup se invocará cuando el objeto sea destruido (equivalente a dispose).

Esto proporciona flexibilidad para adaptar las funciones de Lifecycle Hooks a tus preferencias de nomenclatura, asegurando que tus scripts se mantengan consistentes con el estilo de código de tu proyecto.